home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / gpen32k / source / lib / osrc / g32kass.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-01  |  959 b   |  58 lines

  1. /*
  2.  *        32K色画像圧縮/展開関数 V0.01
  3.  *                                                Copyright(C) おこめ 1992
  4.  */
  5.  
  6. #define    WORD(x)        *((unsigned short int    *)(x))
  7.  
  8. /*        ヒソイス型        */
  9. int ask(o, i, x, y)
  10. char *o, *i;
  11. int x, y;
  12. {
  13.     int j, p = 0, p2 = 0;
  14.     WORD(o)=WORD(i) & 0x7fff;
  15.     for (j = 2; j < x * y * 2; j+=2)
  16.     {
  17.         if ((WORD(i + j) & 0x7fff) == (WORD(i + j - 2) & 0x7fff))
  18.         {
  19.             WORD(o + p) = WORD(o + p) | 0x8000;
  20.             WORD(o + p + 2) = WORD(o + p + 2) + 1;
  21.             p2 = 4;
  22.         }
  23.         else
  24.         {
  25.             p+=p2;
  26.             WORD(o + p) = WORD(i + j) & 0x7fff;
  27.             WORD(o + p + 2) = 0;
  28.             p2 = 2;
  29.         }
  30.     }
  31.     return (p + p2);
  32. }
  33.  
  34.  
  35. void tki(o, i, x, y)
  36. char *o, *i;
  37. int x, y;
  38. {
  39.     int k, j = 0;
  40.     for (k = 0; k < x * y * 2; k+=2);
  41.     {
  42.         if (WORD(i + j) & 0x8000 == 0)
  43.         {
  44.             WORD(o + k) = WORD(i + j);
  45.             j+=2;
  46.         }
  47.         else
  48.         {
  49.             WORD(o + k) = WORD(i + j) & 0x7fff;
  50.             WORD(i + j + 2) = WORD(i + j + 2) - 1;
  51.             if (WORD(i + j + 2) == 0xffff)
  52.             {
  53.                 j+=4;
  54.             }
  55.         }
  56.     }
  57. }
  58.